﻿using GrapeCity.Forguncy.CellTypes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Vant.CellTypes;

namespace Vant.WpfControls.DrawingObject
{
    /// <summary>
    /// Interaction logic for ProgressDrawingObject.xaml
    /// </summary>
    public partial class ProgressDrawingObject : UserControl
    {

        public ProgressDrawingObject(Progress progress, CellTypeViewModelStyle cellStyle, ICellInfo cell, IDrawingHelper drawingHelper)
        {
            var viewModel = new ProgressDrawingObjectViewModel();
            cellStyle.TextWrapping = TextWrapping.NoWrap;
            viewModel.ProgressColor = drawingHelper.GetBrush(progress.color);
            viewModel.TextBackColor = drawingHelper.GetBrush(progress.pivotColor);
            viewModel.TrackColor = drawingHelper.GetBrush(progress.trackColor);

            double value = 30;
            if (!string.IsNullOrEmpty(cell.Value?.ToString()))
            {
                double.TryParse(cell.Value?.ToString(), out value);
            }

            viewModel.Text = string.IsNullOrEmpty(progress.pivotText?.ToString()) ? value.ToString() + "%" : progress.pivotText?.ToString();
            viewModel.ValueColumn = new GridLength(value, GridUnitType.Star);
            viewModel.TrackColumn = new GridLength(Math.Max(0, 100 - value), GridUnitType.Star);
            viewModel.TrackHeight = progress.strokeWidth;
            viewModel.TrackCornerRadius = new CornerRadius(Math.Min(4, progress.strokeWidth / 2));
            viewModel.TextCornerRadius = new CornerRadius((cellStyle.FontSize + 6) / 2);
            viewModel.TextVisibility = progress.showPivot ? Visibility.Visible : Visibility.Collapsed;
            cellStyle.Foreground = cellStyle.Foreground ?? Brushes.White;
            viewModel.CellStyle = cellStyle;
            
            this.DataContext = viewModel;
            InitializeComponent();
        }

        public ProgressDrawingObjectViewModel ViewModel
        {
            get
            {
                return this.DataContext as ProgressDrawingObjectViewModel;
            }
        }
    }
    public class ProgressDrawingObjectViewModel : ModelBase
    {
        public Brush ProgressColor { get; set; }
        public Brush TextBackColor { get; set; }
        public Brush TrackColor { get; set; }

        public GridLength ValueColumn { get; set; }
        public GridLength TrackColumn { get; set; }
        public string Text { get; set; }
        public double TrackHeight { get; set; }
        public Visibility TextVisibility { get; set; }

        public CornerRadius TrackCornerRadius { get; set; }
        public CornerRadius TextCornerRadius { get; set; }
        public CellTypeViewModelStyle CellStyle { get; set; }
    }
}
